const { app, BrowserWindow } = require('electron')
const path = require('path')
const url = require('url')
const fs = require('fs')  // 添加fs模块

// 存储主窗口实例，避免被GC回收
let mainWindow = null

// 单实例锁优化：处理二次启动时激活已有窗口
const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) {
  // 二次启动时直接退出，避免多进程
  app.quit()
} else {
  // 监听二次启动事件，激活已有窗口
  app.on('second-instance', (event, commandLine, workingDirectory) => {
    if (mainWindow) {
      if (mainWindow.isMinimized()) mainWindow.restore() // 恢复最小化窗口
      mainWindow.focus() // 聚焦窗口
    }
  })
}

function createWindow() {
  mainWindow = new BrowserWindow({
    width: 1000,
    height: 640,
    minWidth: 800,
    minHeight: 640,
    title: 'WoW Raid Tracker',
    icon: path.join(__dirname, '../public/icons/app-icon.ico'),
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
      enableRemoteModule: true,
      webSecurity: false,
      devTools: false
    }
  })

  mainWindow.setMenu(null)

  const indexPath = path.join(__dirname, '../vue-dist/index.html')
  const fileUrl = url.format({
    pathname: indexPath,
    protocol: 'file:',
    slashes: true
  })
  mainWindow.loadURL(fileUrl)

  // 监听窗口关闭事件，释放实例
  mainWindow.on('closed', () => {
    mainWindow = null // 窗口关闭后清空实例
  })

  // 打开开发者工具
  win.webContents.openDevTools()

  // 监听页面加载完成
  mainWindow.webContents.on('did-finish-load', () => {
    console.log('应用加载完成')
  })

  // 监听页面加载失败
  mainWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription) => {
    console.error('页面加载失败:', errorCode, errorDescription)
    const { dialog } = require('electron')
    dialog.showErrorBox('加载失败', `无法加载应用: ${errorDescription}\n路径: ${indexPath}`)
  })
}

app.whenReady().then(() => {
  if (process.platform === 'win32') {
    app.setAppUserModelId("private.abbey.wowraidtracker")
  }
  createWindow()

  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

// 完善退出逻辑：所有窗口关闭后彻底退出
app.on('window-all-closed', () => {
  // 无论什么平台，都直接退出（避免macOS残留，Windows更需要）
  app.quit()
})

// 强制退出时清理所有进程
app.on('will-quit', () => {
  // 移除所有监听器，确保彻底退出
  app.removeAllListeners('second-instance')
})